// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: |
    Once the exact MV for a string numeric literal has been
    determined, it is then rounded to a value of the Number type with 20
    significant digits by replacing each significant digit after the 20th
    with a 0 digit or the number value
es5id: 9.3.1_A32
description: Use various long numbers, for example, 1234567890.1234567890
---*/
function Test() {
    assert.sameValue(
      Number("1234567890.1234567890"),
      1234567890.1234567890,
      'Number("1234567890.1234567890") must return 1234567890.1234567890'
    );

    assert.sameValue(
      Number("1234567890.1234567890"),
      1234567890.1234567000,
      'Number("1234567890.1234567890") must return 1234567890.1234567000'
    );

    assert.notSameValue(
      +("1234567890.1234567890"),
      1234567890.123456,
      'The value of +("1234567890.1234567890") is not 1234567890.123456'
    );

    assert.sameValue(
      Number("0.12345678901234567890"),
      0.123456789012345678,
      'Number("0.12345678901234567890") must return 0.123456789012345678'
    );

    assert.sameValue(
      Number("00.12345678901234567890"),
      0.123456789012345678,
      'Number("00.12345678901234567890") must return 0.123456789012345678'
    );
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
